XEQLBL FF PLTPRIM     //EXPECTS A MULTIPLIER IN REG04.
//CLSUM CLREGS          //CLEAR REGS AND STATS DATA
                      //PROGRAM TO PLOT 40 PRIME NUMBER TIMES ON A GRAPH, REV3
4 STO 04              //MULTIPLICATION PARAMETER 10^(4*[0:39])
DROPX 
DOTD ERPN CLSTK        //CLEAR MODES AND STACK
40 STO 00 STO 02       //CHOOSE LOOP COUNTER STARTING AT nn=40 AND DECREMENTS TO 0; STORE START VALUE
DROPX 

LBL M1                //CREATE LOOPING LABEL. FOUR LABELS AVAILABLE M1, M2, M3, M4
  TICKS STO 01          //GET CURRENT TIME IN 0.1 SECOND UNITS
  DROPX 
  RCL 02 RCL 00 -       //GET THE START VALUE OF THE LOOP COUNTER 40 AND REVERSE THE RANGE TO 0 TO 40-1
  GSB M4                //CALL SUBROUTINE TO PRODUCE Y AND X. NO NESTING OF SUBROUTINES POSSIBLE.
  TICKS RCL 01 - 10.0 / //GET EXPIRED TIME IN 1/10 SECONDS DIVIDE BY 10 TO GET SECONDS

  X<>Y                  //TO ENSURE CORRECT X, Y ORDER FOR SUM+
  SUM+                  //ADD TO STATS SUMS, GRAPH, AND WRITE OUTPUT TO DISK
  DROPX  DROPX 

  DSZ 00                //DSZ, DECREMENT AND SKIP NEXT COMMAND IF RESULT WAS ZERO

GTO M1                //THE GTO IS SKIPPED IF THE RESULT WAS 0

ALPHA "STORED ALL PRIMES FROM REGISTERS 10 TO 30" EXIT
PLTRST
PLSTAT                //PLOTS THE STATS DATA
RETURN                //STOPS PROCESSING

//-------------------------------------------------------------------------------------

LBL M4                   // X = 0 TO 39 COUNTER
STO 06 10 STO + 06 DROPX   // STO TO REG06 AND ADD 10 TO REG 06 (PREP FOR INDIRECT STO TO REG10 TO REG49)
ENTER


RCL 04 *                // MULTIPLY RANGE X = (0 TO 39) * REG04
ENTER                   // RETAIN ACTUAL X FOR GRAPH
10^X                    // CALCULATE SEED FOR NEXT PRIME


NEXTP                   // GET NEXT PRIME
STO IND> 06             // STO all primes just to check
DROPX                     // DROPX  PRIME

RTN                   //RETURN TO MAIN PROGRAM
END                   //OPTIONAL END OF PROCESSING MARKER. NOTHING AFTER THIS GETS PARSED.


